package com.guomei.mapper;

import com.guomei.bean.User;
import com.guomei.bean.user.vo.UserInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户表Mapper接口
 */
public interface UserMapper {
    /**
     * 通过ID查询用户
     */
    User selectById(Long id);

    /**
     * 通过ID查询用户
     */
    List<User> selectByParentId(Long parentId);

    /**
     * 通过ID查询用户
     */
    List<User> selectByParentIdAll();

    /**
     * 查询全部未授权用户
     */
    List<User> selectByAll(@Param("ids") List<Long> ids);

    /**
     * 根据角色代码分页查询用户
     */
    List<User> selectByRoleCodes(@Param("roleCodes") List<String> roleCodes);

    /**
     * 通过手机号查询用户
     */
    User selectByPhone(String phone);

    /**
     * 通过微信OpenID查询用户
     */
    User selectByWechatOpenid(String openid);

    /**
     * 通过邀请码查询用户
     */
    User selectByInvitationCode(String invitationCode);

    /**
     * 新增用户
     */
    int insert(User user);

    /**
     * 更新用户
     */
    int update(User user);


    /**
     * 绑定微信账号
     */
    int bindWechat(@Param("userId") Long userId, @Param("openid") String openid, @Param("unionid") String unionid);
    
    /**
     * 根据用户ID查询用户信息（包含角色信息）
     * @param userId 用户ID
     * @return 用户信息（包含角色）
     */
    UserInfo selectUserInfoWithRoleById(@Param("userId") Long userId);
    
    /**
     * 根据用户ID列表和关键词查询用户信息（包含角色信息）
     * @param ids 用户ID列表
     * @param keyword 关键词（支持昵称、手机号模糊搜索）
     * @return 用户信息列表（包含角色）
     */
    List<UserInfo> selectUserInfoWithRoleByIds(@Param("ids") List<Long> ids, @Param("keyword") String keyword);


    /**
     * 根据用户ID列表和关键词查询用户信息（包含角色信息）
     * @param ids 用户ID列表
     * @param keyword 关键词（支持昵称、手机号模糊搜索）
     * @return 用户信息列表（包含角色）
     */
    List<User> selectUserInfoWithRoleByIds1(@Param("ids") List<Long> ids, @Param("keyword") String keyword);
    /**
     * 根据用户ID列表和关键词查询用户信息（包含角色信息）
     * @param ids 用户ID列表
     * @param keyword 关键词（支持昵称、手机号模糊搜索）
     * @return 用户信息列表（包含角色）
     */
    int counttotal(@Param("ids") List<Long> ids, @Param("keyword") String keyword);
    /**
     * 统计用户户
     */
    /**
     * 统计用户总数
     * @return 用户数量
     */
    int count(User user);

    /**
     * 更新用户的parent_id
     * @param userId 用户ID
     * @param parentId 父级用户ID
     * @return 更新结果
     */
    int updateParentId(@Param("userId") Long userId, @Param("parentId") Long parentId);

}
